// src/pieces/solider.cpp
#include "../inc/Chess/solider.h"
#include <cmath>
#include <iostream>
using namespace std;

Soldier::Soldier(PieceType type, int row, int col, bool isRed) 
    : Piece(type, row, col, isRed), hasCrossedRiver(false)
{
}

bool Soldier::is_valid_move(int to_row, int to_col, PieceType board[9][10])
{
    int row = position.first;
    int col = position.second;

    // 计算移动距离
    int row_diff = to_row - row;
    int col_diff = to_col - col;
    
    // 卒/兵只能移动一格
    if (abs(row_diff) + abs(col_diff) != 1) {
        return false;
    }
    
    // 红方卒的移动规则
    if (isRed) {
        // 未过河时只能向前移动
        if (!hasCrossedRiver) {
            if (row_diff == 0 && col_diff == 1) {
                // 过河判断
                if (to_col >= 5) {
                    hasCrossedRiver = true;
                }
                return true;
            }
            return false;
        } 
        // 过河后可以向前或左右移动
        else {
            if ((row_diff == 0 && col_diff == 1) ||  // 向前
                (abs(row_diff) == 1 && col_diff == 0)) { 
                return true;
            }
            return false;
        }
    } 
    // 黑方卒的移动规则
    else {
        // 未过河时只能向前移动
        if (!hasCrossedRiver) {
            if (row_diff == 0 && col_diff == -1) {
                // 过河判断
                if (to_col <= 4) {
                    hasCrossedRiver = true;
                }
                return true;
            }
            return false;
        } 
        // 过河后可以向前或左右移动
        else {
            if ((row_diff == 0 && col_diff == -1) ||  // 向前
                (abs(row_diff) == 1 && col_diff == 0)) { // 左右
                return true;
            }
            return false;
        }
    }
    
}